#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H

#include "global.h"

#include <QDialog>

namespace Ui {
class LoginDialog;
}

class LoginDialog : public QDialog
{
    Q_OBJECT

public:
    explicit LoginDialog(QWidget *parent = nullptr);
    ~LoginDialog();

private:
    // 初始化头像框
    void initHead();

    // 显示错误提示
    void showTip(QString str, bool b_ok);

    // 向错误提示的容器中添加错误提示
    void addTipErr(TipErr te, QString tips);
    // 向错误提示的容器中删除错误提示
    void delTipErr(TipErr te);

    bool enableBtn(bool enabled);

    bool checkEmailValid();
    bool checkUserValid();
    bool checkPwdValid();


    // 初始化对应回复码的回调(http的回调)
    void initHttpHandlers();

private slots:
    // 发送http登录请求
    void on_login_btn_clicked();
    // 发送切换到重置密码界面的信号
    void slot_forget_pwd();
    // 对登录回包后的信号进行处理，进行回调操作
    void slot_login_mod_finish(ReqId id, QString res, ErrorCodes err);
    // 处理TcpManager发出的连接成功信号
    void slot_tcp_con_finish(bool b_success);
    // 处理TcpManager发出的连接成功的信号
    void slot_login_failed(int err);

signals:
    // 切换到注册界面的信号
    void switchRegister();
    void switchReset();
    // TcpServer返回IP和token时，发出的信号
    void sig_connect_tcp(ServerInfo);

private:
    Ui::LoginDialog *ui;
    QMap<ReqId, std::function<void(const QJsonObject&)>> m_handlers;
    QMap<TipErr, QString> m_tip_errs;
    int m_uid;
    QString m_token;
};

#endif // LOGINDIALOG_H
